package com.xxx.springboot.listener;

import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.stereotype.Component;

/**
 * 【redis key过期事件监听器】2.redis key过期监听器 RedisKeyExpirationListener，实现KeyExpirationEventMessageListener 接口
 * 查看KeyExpirationEventMessageListener源码发现，该接口监听所有 db 的过期事件： __keyevent@*__:expired （*表示所有库的keyevent的过期事件）
 */
@Slf4j
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {

	public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
		super(listenerContainer);
	}

	/**
     * 监听 redis key失效事件（注意：只会监听key过期事件，不会监听key删除事件。）
     * @param message
     * @param pattern
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
        String expiredKey = message.toString();
        log.info("RedisKeyExpirationListener|redis key expired. expiredKey:"+expiredKey);
    }
    
}
